mut_str/iter/
alloc.rs

1extern crate alloc;
2// `String` and `Box` are in the std prelude, so ignore unused import
3#[allow(unused_imports)]
4use alloc::{boxed::Box, string::String};
5
6use crate::{Char, OwnedChar};
7
8impl<'a> Extend<&'a Char> for String {
9    fn extend<T: IntoIterator<Item = &'a Char>>(&mut self, iter: T) {
10        let iterator = iter.into_iter();
11        let (lower_bound, _) = iterator.size_hint();
12        self.reserve(lower_bound);
13        iterator.for_each(move |c| self.push_str(c.as_str()));
14    }
15}
16
17impl<'a> Extend<&'a mut Char> for String {
18    fn extend<T: IntoIterator<Item = &'a mut Char>>(&mut self, iter: T) {
19        self.extend(iter.into_iter().map(|x| &*x));
20    }
21}
22
23impl Extend<OwnedChar> for String {
24    fn extend<T: IntoIterator<Item = OwnedChar>>(&mut self, iter: T) {
25        let iterator = iter.into_iter();
26        let (lower_bound, _) = iterator.size_hint();
27        self.reserve(lower_bound);
28        iterator.for_each(move |c| self.push_str(c.as_str()));
29    }
30}
31
32impl<'a> Extend<&'a OwnedChar> for String {
33    fn extend<T: IntoIterator<Item = &'a OwnedChar>>(&mut self, iter: T) {
34        self.extend(iter.into_iter().map(AsRef::as_ref));
35    }
36}
37
38impl<'a> Extend<&'a mut OwnedChar> for String {
39    fn extend<T: IntoIterator<Item = &'a mut OwnedChar>>(&mut self, iter: T) {
40        let iterator = iter.into_iter();
41        let (lower_bound, _) = iterator.size_hint();
42        self.reserve(lower_bound);
43        iterator.for_each(move |c| self.push_str(c.as_str()));
44    }
45}
46
47impl<'a> FromIterator<&'a Char> for String {
48    #[inline]
49    fn from_iter<T: IntoIterator<Item = &'a Char>>(iter: T) -> Self {
50        let mut s = Self::new();
51        s.extend(iter);
52        s
53    }
54}
55
56impl<'a> FromIterator<&'a mut Char> for String {
57    #[inline]
58    fn from_iter<T: IntoIterator<Item = &'a mut Char>>(iter: T) -> Self {
59        let mut s = Self::new();
60        s.extend(iter);
61        s
62    }
63}
64
65impl FromIterator<OwnedChar> for String {
66    #[inline]
67    fn from_iter<T: IntoIterator<Item = OwnedChar>>(iter: T) -> Self {
68        let mut s = Self::new();
69        s.extend(iter);
70        s
71    }
72}
73
74impl<'a> FromIterator<&'a OwnedChar> for String {
75    #[inline]
76    fn from_iter<T: IntoIterator<Item = &'a OwnedChar>>(iter: T) -> Self {
77        let mut s = Self::new();
78        s.extend(iter);
79        s
80    }
81}
82
83impl<'a> FromIterator<&'a mut OwnedChar> for String {
84    #[inline]
85    fn from_iter<T: IntoIterator<Item = &'a mut OwnedChar>>(iter: T) -> Self {
86        let mut s = Self::new();
87        s.extend(iter);
88        s
89    }
90}
91
92impl<'a> FromIterator<&'a Char> for Box<str> {
93    #[inline]
94    fn from_iter<T: IntoIterator<Item = &'a Char>>(iter: T) -> Self {
95        String::from_iter(iter).into_boxed_str()
96    }
97}
98
99impl<'a> FromIterator<&'a mut Char> for Box<str> {
100    #[inline]
101    fn from_iter<T: IntoIterator<Item = &'a mut Char>>(iter: T) -> Self {
102        String::from_iter(iter).into_boxed_str()
103    }
104}
105
106impl FromIterator<OwnedChar> for Box<str> {
107    #[inline]
108    fn from_iter<T: IntoIterator<Item = OwnedChar>>(iter: T) -> Self {
109        String::from_iter(iter).into_boxed_str()
110    }
111}
112
113impl<'a> FromIterator<&'a OwnedChar> for Box<str> {
114    #[inline]
115    fn from_iter<T: IntoIterator<Item = &'a OwnedChar>>(iter: T) -> Self {
116        String::from_iter(iter).into_boxed_str()
117    }
118}
119
120impl<'a> FromIterator<&'a mut OwnedChar> for Box<str> {
121    #[inline]
122    fn from_iter<T: IntoIterator<Item = &'a mut OwnedChar>>(iter: T) -> Self {
123        String::from_iter(iter).into_boxed_str()
124    }
125}