ownable_core/traits/
std.rs1use crate::traits::{IntoOwned, ToBorrowed, ToOwned};
2use std::collections::{HashMap, HashSet};
3use std::hash::{BuildHasher, Hash};
4
5#[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#[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}