gtk4/
string_list.rs

1// Take a look at the license at the top of the repository in the LICENSE file.
2
3use crate::{prelude::*, StringList};
4
5impl FromIterator<&'static str> for StringList {
6    fn from_iter<I: IntoIterator<Item = &'static str>>(iter: I) -> Self {
7        assert_initialized_main_thread!();
8        StringList::new(iter.into_iter().collect::<Vec<_>>().as_slice())
9    }
10}
11
12impl Extend<&'static str> for StringList {
13    fn extend<T: IntoIterator<Item = &'static str>>(&mut self, iter: T) {
14        self.splice(
15            self.n_items(),
16            0,
17            iter.into_iter().collect::<Vec<_>>().as_slice(),
18        );
19    }
20}
21
22impl FromIterator<String> for StringList {
23    fn from_iter<I: IntoIterator<Item = String>>(iter: I) -> Self {
24        assert_initialized_main_thread!();
25        let string_list = StringList::new(&[]);
26        for s in iter {
27            string_list.append(&s);
28        }
29        string_list
30    }
31}
32
33impl Extend<String> for StringList {
34    fn extend<T: IntoIterator<Item = String>>(&mut self, iter: T) {
35        for s in iter {
36            self.append(&s);
37        }
38    }
39}
40
41impl Default for StringList {
42    fn default() -> Self {
43        Self::new(&[])
44    }
45}
46
47#[cfg(test)]
48mod tests {
49    use super::StringList;
50    use crate as gtk4;
51
52    #[test]
53    fn test_from_iter() {
54        let strings = vec!["hello", "world", "stuff"]
55            .into_iter()
56            .collect::<StringList>();
57        assert_eq!(strings.string(1).unwrap(), "world");
58
59        let strings2 = vec!["hello".to_string(), "world".to_string()]
60            .into_iter()
61            .collect::<StringList>();
62
63        assert_eq!(strings2.string(1).unwrap(), "world");
64    }
65
66    #[test]
67    fn test_extend() {
68        let mut strings = vec!["hello", "world", "stuff"]
69            .into_iter()
70            .collect::<StringList>();
71        strings.extend(["gtk-rs", "gtk4", "gnome"]);
72        assert_eq!(strings.string(4).unwrap(), "gtk4");
73    }
74}