1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
use crate::maybe_contains::MaybeContains;

/// A trait marking whether `T` is present.
///
/// See [Traits](crate#traits) section of crate documentation for more information.
pub trait Contains<Item>: MaybeContains<Item, CONTAINS = true> {
    #[doc(hidden)]
    fn get(&self) -> &Item {
        self.try_get().unwrap()
    }

    #[doc(hidden)]
    fn get_mut(&mut self) -> &mut Item {
        self.try_get_mut().unwrap()
    }

    #[doc(hidden)]
    fn remove(self) -> (Item, Self::Removed)
    where
        Self: Sized,
    {
        let (item, removed) = self.try_remove();
        (item.unwrap(), removed)
    }
}

impl<Item, T> Contains<Item> for T where T: MaybeContains<Item, CONTAINS = true> {}