rand_functors/
functors.rs

1#[cfg(feature = "alloc")]
2use alloc::vec;
3#[cfg(feature = "alloc")]
4use alloc::vec::Vec;
5#[cfg(feature = "std")]
6use std::collections::{HashMap, HashSet};
7#[cfg(feature = "std")]
8use std::hash::BuildHasher;
9
10#[cfg(feature = "std")]
11use num::One;
12
13use crate::{Functor, Inner};
14
15impl<I: Inner> Functor<I> for I {
16    #[inline]
17    fn pure(i: I) -> I {
18        i
19    }
20}
21
22#[cfg(feature = "alloc")]
23impl<I: Inner> Functor<I> for Vec<I> {
24    #[inline]
25    fn pure(i: I) -> Self {
26        vec![i]
27    }
28}
29
30#[cfg(feature = "std")]
31impl<I: Inner, N: Clone + Default + One, S: BuildHasher + Default> Functor<I> for HashMap<I, N, S> {
32    #[inline]
33    fn pure(i: I) -> Self {
34        let mut hm = Self::default();
35        hm.insert(i, N::one());
36        hm
37    }
38}
39
40#[cfg(feature = "std")]
41impl<I: Inner, S: BuildHasher + Default> Functor<I> for HashSet<I, S> {
42    fn pure(i: I) -> Self {
43        let mut hs = Self::default();
44        hs.insert(i);
45        hs
46    }
47}