@@ -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>
558559where
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