+struct StringToRgb<'a> {
+ text: &'a str,
+ iter: Box<dyn Iterator<Item = char> + 'a>
+}
+
+impl<'a> StringToRgb<'a> {
+ fn new(text: &'a str) -> StringToRgb {
+ StringToRgb { text, iter: Box::new(text.chars()) }
+ }
+}
+
+
+
+impl Iterator for StringToRgb<'_> {
+ type Item = Rgb<u8>;
+ fn next(&mut self) -> Option<Rgb<u8>> {
+ let r = self.iter.next();
+ let g = self.iter.next();
+ let b = self.iter.next();
+ if r.is_none() && g.is_none() && b.is_none() {
+ None
+ }
+ else {
+ Some(Rgb([r.unwrap_or('\0') as u8, g.unwrap_or('\0') as u8, b.unwrap_or('\0') as u8]))
+ }
+ }
+}
+