ownable_core/traits/
std.rs

1use crate::traits::{IntoOwned, ToBorrowed, ToOwned};
2use std::collections::{HashMap, HashSet};
3use std::hash::{BuildHasher, Hash};
4
5// HashSet
6
7#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
8impl<'a, T, S> ToBorrowed<'a> for HashSet<T, S>
9where
10    T: ToBorrowed<'a> + Eq + Hash,
11    S: BuildHasher + Default,
12{
13    #[inline]
14    fn to_borrowed(&'a self) -> Self {
15        self.iter().map(ToBorrowed::to_borrowed).collect()
16    }
17}
18
19#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
20impl<T, S> ToOwned for HashSet<T, S>
21where
22    T: ToOwned,
23    <T as ToOwned>::Owned: Eq + Hash,
24    S: BuildHasher + Default,
25{
26    type Owned = HashSet<T::Owned, S>;
27
28    #[inline]
29    fn to_owned(&self) -> Self::Owned where {
30        self.iter().map(ToOwned::to_owned).collect()
31    }
32}
33
34#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
35impl<T, S> IntoOwned for HashSet<T, S>
36where
37    T: IntoOwned,
38    <T as IntoOwned>::Owned: Eq + Hash,
39    S: BuildHasher + Default,
40{
41    type Owned = HashSet<T::Owned, S>;
42
43    #[inline]
44    fn into_owned(self) -> Self::Owned {
45        self.into_iter().map(IntoOwned::into_owned).collect()
46    }
47}
48
49// HashMap
50
51#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
52impl<'a, K, V, S> ToBorrowed<'a> for HashMap<K, V, S>
53where
54    K: ToBorrowed<'a> + Eq + Hash,
55    V: ToBorrowed<'a>,
56    S: BuildHasher + Default,
57{
58    #[inline]
59    fn to_borrowed(&'a self) -> Self {
60        self.iter()
61            .map(|(k, v)| (ToBorrowed::to_borrowed(k), ToBorrowed::to_borrowed(v)))
62            .collect()
63    }
64}
65
66#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
67impl<K, V, S> ToOwned for HashMap<K, V, S>
68where
69    K: ToOwned,
70    <K as ToOwned>::Owned: Eq + Hash,
71    V: ToOwned,
72    S: BuildHasher + Default,
73{
74    type Owned = HashMap<K::Owned, V::Owned, S>;
75
76    #[inline]
77    fn to_owned(&self) -> Self::Owned where {
78        self.iter()
79            .map(|(k, v)| (ToOwned::to_owned(k), ToOwned::to_owned(v)))
80            .collect()
81    }
82}
83
84#[cfg_attr(docsrs, doc(cfg(feature = "std")))]
85impl<K, V, S> IntoOwned for HashMap<K, V, S>
86where
87    K: IntoOwned,
88    <K as IntoOwned>::Owned: Eq + Hash,
89    V: IntoOwned,
90    S: BuildHasher + Default,
91{
92    type Owned = HashMap<K::Owned, V::Owned, S>;
93
94    #[inline]
95    fn into_owned(self) -> Self::Owned {
96        self.into_iter()
97            .map(|(k, v)| (IntoOwned::into_owned(k), IntoOwned::into_owned(v)))
98            .collect()
99    }
100}