Skip to content

Commit ca1f26e

Browse files
committed
Add examples to BitFlags::from_bits*
1 parent 251cb9f commit ca1f26e

File tree

1 file changed

+83
-18
lines changed

1 file changed

+83
-18
lines changed

src/lib.rs

Lines changed: 83 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -201,10 +201,10 @@ pub trait BitFlag: Copy + Clone + 'static + _internal::RawBitFlags {
201201
///
202202
/// use enumflags2::BitFlag;
203203
///
204-
/// let from_bits = MyFlag::from_bits(0b11).unwrap();
205-
/// assert_eq!(from_bits.contains(MyFlag::One), true);
206-
/// assert_eq!(from_bits.contains(MyFlag::Two), true);
207-
/// assert_eq!(from_bits.contains(MyFlag::Three), false);
204+
/// let flags = MyFlag::from_bits(0b11).unwrap();
205+
/// assert_eq!(flags.contains(MyFlag::One), true);
206+
/// assert_eq!(flags.contains(MyFlag::Two), true);
207+
/// assert_eq!(flags.contains(MyFlag::Three), false);
208208
/// let invalid = MyFlag::from_bits(1 << 3);
209209
/// assert!(invalid.is_err());
210210
/// ```
@@ -233,10 +233,10 @@ pub trait BitFlag: Copy + Clone + 'static + _internal::RawBitFlags {
233233
///
234234
/// use enumflags2::BitFlag;
235235
///
236-
/// let from_bits = MyFlag::from_bits_truncate(0b1_1011);
237-
/// assert_eq!(from_bits.contains(MyFlag::One), true);
238-
/// assert_eq!(from_bits.contains(MyFlag::Two), true);
239-
/// assert_eq!(from_bits.contains(MyFlag::Three), false);
236+
/// let flags = MyFlag::from_bits_truncate(0b1_1011);
237+
/// assert_eq!(flags.contains(MyFlag::One), true);
238+
/// assert_eq!(flags.contains(MyFlag::Two), true);
239+
/// assert_eq!(flags.contains(MyFlag::Three), false);
240240
/// ```
241241
#[inline]
242242
fn from_bits_truncate(bits: Self::Numeric) -> BitFlags<Self> {
@@ -249,6 +249,11 @@ pub trait BitFlag: Copy + Clone + 'static + _internal::RawBitFlags {
249249
/// Consider using [`from_bits`][BitFlag::from_bits]
250250
/// or [`from_bits_truncate`][BitFlag::from_bits_truncate] instead.
251251
///
252+
/// # Safety
253+
///
254+
/// All bits set in `val` must correspond to a value of the enum.
255+
///
256+
/// # Example
252257
///
253258
/// This is a convenience reexport of [`BitFlags::from_bits_unchecked`]. It can be
254259
/// called with `MyFlag::from_bits_unchecked(bits)`, thus bypassing the need for
@@ -267,18 +272,14 @@ pub trait BitFlag: Copy + Clone + 'static + _internal::RawBitFlags {
267272
///
268273
/// use enumflags2::BitFlag;
269274
///
270-
/// let from_bits = unsafe {
275+
/// let flags = unsafe {
271276
/// MyFlag::from_bits_unchecked(0b011)
272277
/// };
273278
///
274-
/// assert_eq!(from_bits.contains(MyFlag::One), true);
275-
/// assert_eq!(from_bits.contains(MyFlag::Two), true);
276-
/// assert_eq!(from_bits.contains(MyFlag::Three), false);
279+
/// assert_eq!(flags.contains(MyFlag::One), true);
280+
/// assert_eq!(flags.contains(MyFlag::Two), true);
281+
/// assert_eq!(flags.contains(MyFlag::Three), false);
277282
/// ```
278-
///
279-
/// # Safety
280-
///
281-
/// All bits set in `val` must correspond to a value of the enum.
282283
#[inline]
283284
unsafe fn from_bits_unchecked(bits: Self::Numeric) -> BitFlags<Self> {
284285
BitFlags::from_bits_unchecked(bits)
@@ -558,8 +559,30 @@ impl<T> BitFlags<T>
558559
where
559560
T: BitFlag,
560561
{
561-
/// Returns a `BitFlags<T>` if the raw value provided does not contain
562+
/// Create a `BitFlags` if the raw value provided does not contain
562563
/// any illegal flags.
564+
///
565+
/// See also: [a convenience re-export in the `BitFlag` trait][BitFlag::from_bits],
566+
/// which can help avoid the need for type hints.
567+
///
568+
/// ```
569+
/// # use enumflags2::{bitflags, BitFlags};
570+
/// #[bitflags]
571+
/// #[repr(u8)]
572+
/// #[derive(Clone, Copy, PartialEq, Eq, Debug)]
573+
/// enum MyFlag {
574+
/// One = 1 << 0,
575+
/// Two = 1 << 1,
576+
/// Three = 1 << 2,
577+
/// }
578+
///
579+
/// let flags: BitFlags<MyFlag> = BitFlags::from_bits(0b11).unwrap();
580+
/// assert_eq!(flags.contains(MyFlag::One), true);
581+
/// assert_eq!(flags.contains(MyFlag::Two), true);
582+
/// assert_eq!(flags.contains(MyFlag::Three), false);
583+
/// let invalid = BitFlags::<MyFlag>::from_bits(1 << 3);
584+
/// assert!(invalid.is_err());
585+
/// ```
563586
#[inline]
564587
pub fn from_bits(bits: T::Numeric) -> Result<Self, FromBitsError<T>> {
565588
let flags = Self::from_bits_truncate(bits);
@@ -573,8 +596,28 @@ where
573596
}
574597
}
575598

576-
/// Create a `BitFlags<T>` from an underlying bitwise value. If any
599+
/// Create a `BitFlags` from an underlying bitwise value. If any
577600
/// invalid bits are set, ignore them.
601+
///
602+
/// See also: [a convenience re-export in the `BitFlag` trait][BitFlag::from_bits_truncate],
603+
/// which can help avoid the need for type hints.
604+
///
605+
/// ```
606+
/// # use enumflags2::{bitflags, BitFlags};
607+
/// #[bitflags]
608+
/// #[repr(u8)]
609+
/// #[derive(Clone, Copy, PartialEq, Eq)]
610+
/// enum MyFlag {
611+
/// One = 1 << 0,
612+
/// Two = 1 << 1,
613+
/// Three = 1 << 2,
614+
/// }
615+
///
616+
/// let flags: BitFlags<MyFlag> = BitFlags::from_bits_truncate(0b1_1011);
617+
/// assert_eq!(flags.contains(MyFlag::One), true);
618+
/// assert_eq!(flags.contains(MyFlag::Two), true);
619+
/// assert_eq!(flags.contains(MyFlag::Three), false);
620+
/// ```
578621
#[must_use]
579622
#[inline(always)]
580623
pub fn from_bits_truncate(bits: T::Numeric) -> Self {
@@ -592,6 +635,28 @@ where
592635
/// # Safety
593636
///
594637
/// All bits set in `val` must correspond to a value of the enum.
638+
///
639+
/// # Example
640+
///
641+
/// ```
642+
/// # use enumflags2::{bitflags, BitFlags};
643+
/// #[bitflags]
644+
/// #[repr(u8)]
645+
/// #[derive(Clone, Copy, PartialEq, Eq)]
646+
/// enum MyFlag {
647+
/// One = 1 << 0,
648+
/// Two = 1 << 1,
649+
/// Three = 1 << 2,
650+
/// }
651+
///
652+
/// let flags: BitFlags<MyFlag> = unsafe {
653+
/// BitFlags::from_bits_unchecked(0b011)
654+
/// };
655+
///
656+
/// assert_eq!(flags.contains(MyFlag::One), true);
657+
/// assert_eq!(flags.contains(MyFlag::Two), true);
658+
/// assert_eq!(flags.contains(MyFlag::Three), false);
659+
/// ```
595660
#[must_use]
596661
#[inline(always)]
597662
pub unsafe fn from_bits_unchecked(val: T::Numeric) -> Self {

0 commit comments

Comments
 (0)