rand_functors/
functors.rs1#[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}