I\'d like to reuse an iterator I made, so as to avoid paying to recreate it from scratch. But iterators don\'t seem to be cloneable and collect mov
Iterators in general are Clone-able if all their "pieces" are Clone-able. You have a couple of them in my_iter that are not: the anonymous closures (like the one in flat_map) and the ToUppercase struct returned by to_uppercase.
What you can do is:
my_iter into a Vec before populating my_struct (since you seem to collect it anyway in there): let my_iter: Vec = my_string.unwrap_or("A").chars().flat_map(|c|c.to_uppercase()).map(|c| Tag::from(c).unwrap() ).collect(); my_string (since you call unwrap_or on it I assume it's not a String) and Tag it's hard to help you more concretely with this.