Coverage Report

Created: 2025-10-13 07:12

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/rust/registry/src/index.crates.io-1949cf8c6b5b557f/bitflags-2.9.4/src/public.rs
Line
Count
Source
1
//! Generate the user-facing flags type.
2
//!
3
//! The code here belongs to the end-user, so new trait implementations and methods can't be
4
//! added without potentially breaking users.
5
6
/// Declare the user-facing bitflags struct.
7
///
8
/// This type is guaranteed to be a newtype with a `bitflags`-facing type as its single field.
9
#[macro_export]
10
#[doc(hidden)]
11
macro_rules! __declare_public_bitflags {
12
    (
13
        $(#[$outer:meta])*
14
        $vis:vis struct $PublicBitFlags:ident
15
    ) => {
16
        $(#[$outer])*
17
        $vis struct $PublicBitFlags(<$PublicBitFlags as $crate::__private::PublicFlags>::Internal);
18
    };
19
}
20
21
/// Implement functions on the public (user-facing) bitflags type.
22
///
23
/// We need to be careful about adding new methods and trait implementations here because they
24
/// could conflict with items added by the end-user.
25
#[macro_export]
26
#[doc(hidden)]
27
macro_rules! __impl_public_bitflags_forward {
28
    (
29
        $(#[$outer:meta])*
30
        $PublicBitFlags:ident: $T:ty, $InternalBitFlags:ident
31
    ) => {
32
        $crate::__impl_bitflags! {
33
            params: self, bits, name, other, value;
34
            $(#[$outer])*
35
            $PublicBitFlags: $T {
36
                fn empty() {
37
                    Self($InternalBitFlags::empty())
38
                }
39
40
                fn all() {
41
                    Self($InternalBitFlags::all())
42
                }
43
44
0
                fn bits(&self) {
45
0
                    self.0.bits()
46
                }
47
48
                fn from_bits(bits) {
49
                    match $InternalBitFlags::from_bits(bits) {
50
                        $crate::__private::core::option::Option::Some(bits) => $crate::__private::core::option::Option::Some(Self(bits)),
51
                        $crate::__private::core::option::Option::None => $crate::__private::core::option::Option::None,
52
                    }
53
                }
54
55
                fn from_bits_truncate(bits) {
56
                    Self($InternalBitFlags::from_bits_truncate(bits))
57
                }
58
59
0
                fn from_bits_retain(bits) {
60
0
                    Self($InternalBitFlags::from_bits_retain(bits))
61
                }
62
63
                fn from_name(name) {
64
                    match $InternalBitFlags::from_name(name) {
65
                        $crate::__private::core::option::Option::Some(bits) => $crate::__private::core::option::Option::Some(Self(bits)),
66
                        $crate::__private::core::option::Option::None => $crate::__private::core::option::Option::None,
67
                    }
68
                }
69
70
                fn is_empty(&self) {
71
                    self.0.is_empty()
72
                }
73
74
                fn is_all(&self) {
75
                    self.0.is_all()
76
                }
77
78
0
                fn intersects(&self, other) {
79
0
                    self.0.intersects(other.0)
Unexecuted instantiation: <png::common::Transformations>::intersects
Unexecuted instantiation: <png::common::Transformations>::intersects
Unexecuted instantiation: <png::common::Transformations>::intersects
80
                }
81
82
39.9k
                fn contains(&self, other) {
83
39.9k
                    self.0.contains(other.0)
Unexecuted instantiation: <png::common::Transformations>::contains
<png::common::Transformations>::contains
Line
Count
Source
82
39.9k
                fn contains(&self, other) {
83
39.9k
                    self.0.contains(other.0)
Unexecuted instantiation: <png::common::Transformations>::contains
Unexecuted instantiation: <png::common::Transformations>::contains
84
                }
85
86
                fn insert(&mut self, other) {
87
                    self.0.insert(other.0)
88
                }
89
90
                fn remove(&mut self, other) {
91
                    self.0.remove(other.0)
92
                }
93
94
                fn toggle(&mut self, other) {
95
                    self.0.toggle(other.0)
96
                }
97
98
                fn set(&mut self, other, value) {
99
                    self.0.set(other.0, value)
100
                }
101
102
                fn intersection(self, other) {
103
                    Self(self.0.intersection(other.0))
104
                }
105
106
0
                fn union(self, other) {
107
0
                    Self(self.0.union(other.0))
108
                }
109
110
                fn difference(self, other) {
111
                    Self(self.0.difference(other.0))
112
                }
113
114
                fn symmetric_difference(self, other) {
115
                    Self(self.0.symmetric_difference(other.0))
116
                }
117
118
                fn complement(self) {
119
                    Self(self.0.complement())
120
                }
121
            }
122
        }
123
    };
124
}
125
126
/// Implement functions on the public (user-facing) bitflags type.
127
///
128
/// We need to be careful about adding new methods and trait implementations here because they
129
/// could conflict with items added by the end-user.
130
#[macro_export]
131
#[doc(hidden)]
132
macro_rules! __impl_public_bitflags {
133
    (
134
        $(#[$outer:meta])*
135
        $BitFlags:ident: $T:ty, $PublicBitFlags:ident {
136
            $(
137
                $(#[$inner:ident $($args:tt)*])*
138
                const $Flag:tt = $value:expr;
139
            )*
140
        }
141
    ) => {
142
        $crate::__impl_bitflags! {
143
            params: self, bits, name, other, value;
144
            $(#[$outer])*
145
            $BitFlags: $T {
146
                fn empty() {
147
                    Self(<$T as $crate::Bits>::EMPTY)
148
                }
149
150
                fn all() {
151
                    let mut truncated = <$T as $crate::Bits>::EMPTY;
152
                    let mut i = 0;
153
154
                    $(
155
                        $crate::__bitflags_expr_safe_attrs!(
156
                            $(#[$inner $($args)*])*
157
                            {{
158
                                let flag = <$PublicBitFlags as $crate::Flags>::FLAGS[i].value().bits();
159
160
                                truncated = truncated | flag;
161
                                i += 1;
162
                            }}
163
                        );
164
                    )*
165
166
                    let _ = i;
167
                    Self(truncated)
168
                }
169
170
0
                fn bits(&self) {
171
0
                    self.0
172
                }
173
174
                fn from_bits(bits) {
175
                    let truncated = Self::from_bits_truncate(bits).0;
176
177
                    if truncated == bits {
178
                        $crate::__private::core::option::Option::Some(Self(bits))
179
                    } else {
180
                        $crate::__private::core::option::Option::None
181
                    }
182
                }
183
184
                fn from_bits_truncate(bits) {
185
                    Self(bits & Self::all().0)
186
                }
187
188
0
                fn from_bits_retain(bits) {
189
0
                    Self(bits)
190
                }
191
192
                fn from_name(name) {
193
                    $(
194
                        $crate::__bitflags_flag!({
195
                            name: $Flag,
196
                            named: {
197
                                $crate::__bitflags_expr_safe_attrs!(
198
                                    $(#[$inner $($args)*])*
199
                                    {
200
                                        if name == $crate::__private::core::stringify!($Flag) {
201
                                            return $crate::__private::core::option::Option::Some(Self($PublicBitFlags::$Flag.bits()));
202
                                        }
203
                                    }
204
                                );
205
                            },
206
                            unnamed: {},
207
                        });
208
                    )*
209
210
                    let _ = name;
211
                    $crate::__private::core::option::Option::None
212
                }
213
214
0
                fn is_empty(&self) {
215
0
                    self.0 == <$T as $crate::Bits>::EMPTY
216
                }
217
218
                fn is_all(&self) {
219
                    // NOTE: We check against `Self::all` here, not `Self::Bits::ALL`
220
                    // because the set of all flags may not use all bits
221
                    Self::all().0 | self.0 == self.0
222
                }
223
224
0
                fn intersects(&self, other) {
225
0
                    self.0 & other.0 != <$T as $crate::Bits>::EMPTY
Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects
Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects
Unexecuted instantiation: <png::common::_::InternalBitFlags>::intersects
226
                }
227
228
39.9k
                fn contains(&self, other) {
229
39.9k
                    self.0 & other.0 == other.0
Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains
<png::common::_::InternalBitFlags>::contains
Line
Count
Source
228
39.9k
                fn contains(&self, other) {
229
39.9k
                    self.0 & other.0 == other.0
Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains
Unexecuted instantiation: <png::common::_::InternalBitFlags>::contains
230
                }
231
232
                fn insert(&mut self, other) {
233
                    *self = Self(self.0).union(other);
234
                }
235
236
                fn remove(&mut self, other) {
237
                    *self = Self(self.0).difference(other);
238
                }
239
240
                fn toggle(&mut self, other) {
241
                    *self = Self(self.0).symmetric_difference(other);
242
                }
243
244
                fn set(&mut self, other, value) {
245
                    if value {
246
                        self.insert(other);
247
                    } else {
248
                        self.remove(other);
249
                    }
250
                }
251
252
                fn intersection(self, other) {
253
                    Self(self.0 & other.0)
254
                }
255
256
0
                fn union(self, other) {
257
0
                    Self(self.0 | other.0)
258
                }
259
260
                fn difference(self, other) {
261
                    Self(self.0 & !other.0)
262
                }
263
264
                fn symmetric_difference(self, other) {
265
                    Self(self.0 ^ other.0)
266
                }
267
268
                fn complement(self) {
269
                    Self::from_bits_truncate(!self.0)
270
                }
271
            }
272
        }
273
    };
274
}
275
276
/// Implement iterators on the public (user-facing) bitflags type.
277
#[macro_export]
278
#[doc(hidden)]
279
macro_rules! __impl_public_bitflags_iter {
280
    (
281
        $(#[$outer:meta])*
282
        $BitFlags:ident: $T:ty, $PublicBitFlags:ident
283
    ) => {
284
        $(#[$outer])*
285
        impl $BitFlags {
286
            /// Yield a set of contained flags values.
287
            ///
288
            /// Each yielded flags value will correspond to a defined named flag. Any unknown bits
289
            /// will be yielded together as a final flags value.
290
            #[inline]
291
0
            pub const fn iter(&self) -> $crate::iter::Iter<$PublicBitFlags> {
292
0
                $crate::iter::Iter::__private_const_new(
293
                    <$PublicBitFlags as $crate::Flags>::FLAGS,
294
0
                    $PublicBitFlags::from_bits_retain(self.bits()),
295
0
                    $PublicBitFlags::from_bits_retain(self.bits()),
296
                )
297
0
            }
Unexecuted instantiation: <png::common::Transformations>::iter
Unexecuted instantiation: <png::common::_::InternalBitFlags>::iter
298
299
            /// Yield a set of contained named flags values.
300
            ///
301
            /// This method is like [`iter`](#method.iter), except only yields bits in contained named flags.
302
            /// Any unknown bits, or bits not corresponding to a contained flag will not be yielded.
303
            #[inline]
304
            pub const fn iter_names(&self) -> $crate::iter::IterNames<$PublicBitFlags> {
305
                $crate::iter::IterNames::__private_const_new(
306
                    <$PublicBitFlags as $crate::Flags>::FLAGS,
307
                    $PublicBitFlags::from_bits_retain(self.bits()),
308
                    $PublicBitFlags::from_bits_retain(self.bits()),
309
                )
310
            }
311
        }
312
313
        $(#[$outer:meta])*
314
        impl $crate::__private::core::iter::IntoIterator for $BitFlags {
315
            type Item = $PublicBitFlags;
316
            type IntoIter = $crate::iter::Iter<$PublicBitFlags>;
317
318
0
            fn into_iter(self) -> Self::IntoIter {
319
0
                self.iter()
320
0
            }
Unexecuted instantiation: <png::common::Transformations as core::iter::traits::collect::IntoIterator>::into_iter
Unexecuted instantiation: <png::common::_::InternalBitFlags as core::iter::traits::collect::IntoIterator>::into_iter
321
        }
322
    };
323
}
324
325
/// Implement traits on the public (user-facing) bitflags type.
326
#[macro_export]
327
#[doc(hidden)]
328
macro_rules! __impl_public_bitflags_ops {
329
    (
330
        $(#[$outer:meta])*
331
        $PublicBitFlags:ident
332
    ) => {
333
334
        $(#[$outer])*
335
        impl $crate::__private::core::fmt::Binary for $PublicBitFlags {
336
0
            fn fmt(
337
0
                &self,
338
0
                f: &mut $crate::__private::core::fmt::Formatter,
339
0
            ) -> $crate::__private::core::fmt::Result {
340
0
                let inner = self.0;
341
0
                $crate::__private::core::fmt::Binary::fmt(&inner, f)
342
0
            }
Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::Binary>::fmt
Unexecuted instantiation: <png::common::Transformations as core::fmt::Binary>::fmt
343
        }
344
345
        $(#[$outer])*
346
        impl $crate::__private::core::fmt::Octal for $PublicBitFlags {
347
0
            fn fmt(
348
0
                &self,
349
0
                f: &mut $crate::__private::core::fmt::Formatter,
350
0
            ) -> $crate::__private::core::fmt::Result {
351
0
                let inner = self.0;
352
0
                $crate::__private::core::fmt::Octal::fmt(&inner, f)
353
0
            }
Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::Octal>::fmt
Unexecuted instantiation: <png::common::Transformations as core::fmt::Octal>::fmt
354
        }
355
356
        $(#[$outer])*
357
        impl $crate::__private::core::fmt::LowerHex for $PublicBitFlags {
358
0
            fn fmt(
359
0
                &self,
360
0
                f: &mut $crate::__private::core::fmt::Formatter,
361
0
            ) -> $crate::__private::core::fmt::Result {
362
0
                let inner = self.0;
363
0
                $crate::__private::core::fmt::LowerHex::fmt(&inner, f)
364
0
            }
Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::LowerHex>::fmt
Unexecuted instantiation: <png::common::Transformations as core::fmt::LowerHex>::fmt
365
        }
366
367
        $(#[$outer])*
368
        impl $crate::__private::core::fmt::UpperHex for $PublicBitFlags {
369
0
            fn fmt(
370
0
                &self,
371
0
                f: &mut $crate::__private::core::fmt::Formatter,
372
0
            ) -> $crate::__private::core::fmt::Result {
373
0
                let inner = self.0;
374
0
                $crate::__private::core::fmt::UpperHex::fmt(&inner, f)
375
0
            }
Unexecuted instantiation: <png::common::Transformations as core::fmt::UpperHex>::fmt
Unexecuted instantiation: <png::common::_::InternalBitFlags as core::fmt::UpperHex>::fmt
376
        }
377
378
        $(#[$outer])*
379
        impl $crate::__private::core::ops::BitOr for $PublicBitFlags {
380
            type Output = Self;
381
382
            /// The bitwise or (`|`) of the bits in two flags values.
383
            #[inline]
384
0
            fn bitor(self, other: $PublicBitFlags) -> Self {
385
0
                self.union(other)
386
0
            }
387
        }
388
389
        $(#[$outer])*
390
        impl $crate::__private::core::ops::BitOrAssign for $PublicBitFlags {
391
            /// The bitwise or (`|`) of the bits in two flags values.
392
            #[inline]
393
            fn bitor_assign(&mut self, other: Self) {
394
                self.insert(other);
395
            }
396
        }
397
398
        $(#[$outer])*
399
        impl $crate::__private::core::ops::BitXor for $PublicBitFlags {
400
            type Output = Self;
401
402
            /// The bitwise exclusive-or (`^`) of the bits in two flags values.
403
            #[inline]
404
            fn bitxor(self, other: Self) -> Self {
405
                self.symmetric_difference(other)
406
            }
407
        }
408
409
        $(#[$outer])*
410
        impl $crate::__private::core::ops::BitXorAssign for $PublicBitFlags {
411
            /// The bitwise exclusive-or (`^`) of the bits in two flags values.
412
            #[inline]
413
            fn bitxor_assign(&mut self, other: Self) {
414
                self.toggle(other);
415
            }
416
        }
417
418
        $(#[$outer])*
419
        impl $crate::__private::core::ops::BitAnd for $PublicBitFlags {
420
            type Output = Self;
421
422
            /// The bitwise and (`&`) of the bits in two flags values.
423
            #[inline]
424
            fn bitand(self, other: Self) -> Self {
425
                self.intersection(other)
426
            }
427
        }
428
429
        $(#[$outer])*
430
        impl $crate::__private::core::ops::BitAndAssign for $PublicBitFlags {
431
            /// The bitwise and (`&`) of the bits in two flags values.
432
            #[inline]
433
            fn bitand_assign(&mut self, other: Self) {
434
                *self = Self::from_bits_retain(self.bits()).intersection(other);
435
            }
436
        }
437
438
        $(#[$outer])*
439
        impl $crate::__private::core::ops::Sub for $PublicBitFlags {
440
            type Output = Self;
441
442
            /// The intersection of a source flags value with the complement of a target flags value (`&!`).
443
            ///
444
            /// This method is not equivalent to `self & !other` when `other` has unknown bits set.
445
            /// `difference` won't truncate `other`, but the `!` operator will.
446
            #[inline]
447
            fn sub(self, other: Self) -> Self {
448
                self.difference(other)
449
            }
450
        }
451
452
        $(#[$outer])*
453
        impl $crate::__private::core::ops::SubAssign for $PublicBitFlags {
454
            /// The intersection of a source flags value with the complement of a target flags value (`&!`).
455
            ///
456
            /// This method is not equivalent to `self & !other` when `other` has unknown bits set.
457
            /// `difference` won't truncate `other`, but the `!` operator will.
458
            #[inline]
459
            fn sub_assign(&mut self, other: Self) {
460
                self.remove(other);
461
            }
462
        }
463
464
        $(#[$outer])*
465
        impl $crate::__private::core::ops::Not for $PublicBitFlags {
466
            type Output = Self;
467
468
            /// The bitwise negation (`!`) of the bits in a flags value, truncating the result.
469
            #[inline]
470
            fn not(self) -> Self {
471
                self.complement()
472
            }
473
        }
474
475
        $(#[$outer])*
476
        impl $crate::__private::core::iter::Extend<$PublicBitFlags> for $PublicBitFlags {
477
            /// The bitwise or (`|`) of the bits in each flags value.
478
            fn extend<T: $crate::__private::core::iter::IntoIterator<Item = Self>>(
479
                &mut self,
480
                iterator: T,
481
            ) {
482
                for item in iterator {
483
                    self.insert(item)
484
                }
485
            }
486
        }
487
488
        $(#[$outer])*
489
        impl $crate::__private::core::iter::FromIterator<$PublicBitFlags> for $PublicBitFlags {
490
            /// The bitwise or (`|`) of the bits in each flags value.
491
            fn from_iter<T: $crate::__private::core::iter::IntoIterator<Item = Self>>(
492
                iterator: T,
493
            ) -> Self {
494
                use $crate::__private::core::iter::Extend;
495
496
                let mut result = Self::empty();
497
                result.extend(iterator);
498
                result
499
            }
500
        }
501
    };
502
}
503
504
/// Implement constants on the public (user-facing) bitflags type.
505
#[macro_export]
506
#[doc(hidden)]
507
macro_rules! __impl_public_bitflags_consts {
508
    (
509
        $(#[$outer:meta])*
510
        $PublicBitFlags:ident: $T:ty {
511
            $(
512
                $(#[$inner:ident $($args:tt)*])*
513
                const $Flag:tt = $value:expr;
514
            )*
515
        }
516
    ) => {
517
        $(#[$outer])*
518
        impl $PublicBitFlags {
519
            $(
520
                $crate::__bitflags_flag!({
521
                    name: $Flag,
522
                    named: {
523
                        $(#[$inner $($args)*])*
524
                        #[allow(
525
                            deprecated,
526
                            non_upper_case_globals,
527
                        )]
528
                        pub const $Flag: Self = Self::from_bits_retain($value);
529
                    },
530
                    unnamed: {},
531
                });
532
            )*
533
        }
534
535
        $(#[$outer])*
536
        impl $crate::Flags for $PublicBitFlags {
537
            const FLAGS: &'static [$crate::Flag<$PublicBitFlags>] = &[
538
                $(
539
                    $crate::__bitflags_flag!({
540
                        name: $Flag,
541
                        named: {
542
                            $crate::__bitflags_expr_safe_attrs!(
543
                                $(#[$inner $($args)*])*
544
                                {
545
                                    #[allow(
546
                                        deprecated,
547
                                        non_upper_case_globals,
548
                                    )]
549
                                    $crate::Flag::new($crate::__private::core::stringify!($Flag), $PublicBitFlags::$Flag)
550
                                }
551
                            )
552
                        },
553
                        unnamed: {
554
                            $crate::__bitflags_expr_safe_attrs!(
555
                                $(#[$inner $($args)*])*
556
                                {
557
                                    #[allow(
558
                                        deprecated,
559
                                        non_upper_case_globals,
560
                                    )]
561
                                    $crate::Flag::new("", $PublicBitFlags::from_bits_retain($value))
562
                                }
563
                            )
564
                        },
565
                    }),
566
                )*
567
            ];
568
569
            type Bits = $T;
570
571
0
            fn bits(&self) -> $T {
572
0
                $PublicBitFlags::bits(self)
573
0
            }
574
575
0
            fn from_bits_retain(bits: $T) -> $PublicBitFlags {
576
0
                $PublicBitFlags::from_bits_retain(bits)
577
0
            }
578
        }
579
    };
580
}